/**
 * 按钮组件预览处理
 * 用于处理按钮组件在预览模式下的特殊行为和数据适配
 */

export default {
  /**
   * 准备预览数据
   * @param {Object} component 组件数据
   * @returns {Object} 处理后的组件数据
   */
  preparePreviewData(component) {
    // 复制组件数据，避免修改原始数据
    const previewComponent = JSON.parse(JSON.stringify(component));
    
    // 确保props存在
    if (!previewComponent.props) {
      previewComponent.props = {};
    }
    
    // 修复：确保按钮文本和类型属性被保留
    const buttonProps = {
      ...previewComponent.props,
      // 确保按钮在预览模式可交互
      disabled: previewComponent.props.disabled === true,
      // 确保这些关键属性存在
      buttonText: previewComponent.props.buttonText || '按钮',
      type: previewComponent.props.type || 'primary',
      // 其他常见按钮属性
      plain: previewComponent.props.plain === true,
      round: previewComponent.props.round === true,
      circle: previewComponent.props.circle === true,
      size: previewComponent.props.size || 'default',
      icon: previewComponent.props.icon
    };
    
    // 按钮特定的预览适配
    return {
      ...previewComponent,
      isPreviewMode: true,
      props: buttonProps
    };
  },
  
  /**
   * 预览渲染选项
   */
  renderOptions: {
    useWrapper: true,        // 是否使用包装容器
    interactive: true,       // 是否允许交互
    renderChildren: true     // 是否渲染子组件
  },
  
  /**
   * 处理预览模式的交互
   * @param {Object} component 组件数据
   * @param {Object} context 上下文
   */
  handlePreviewInteraction(component, context) {
    console.log('按钮在预览模式被点击:', component.id);
    
    // 如果组件定义了点击回调，可以在这里模拟执行
    if (component.props?.clickHandler) {
      try {
        // 安全地执行回调函数字符串
        // 实际应用中应该使用更安全的方法执行代码
        console.log('执行按钮点击回调');
      } catch (error) {
        console.error('执行按钮回调出错:', error);
      }
    }
    
    return true; // 允许事件冒泡
  }
}; 